package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.beanDao.TablaDetRequest;
import com.sisgesbyte.dao.seguridad.MantenimientoTablaDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.TablasListaEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.TablaListaResponse;
import com.sisgesbyte.services.sistema.bean.TablaSistemaBean;

@Stateless
public class MantenimientoTablaImpl implements MantenimientoTabla {
	
	@EJB
	private MantenimientoTablaDao mantenimientoTablaDao;
	
	@Inject
	private Validaciones validaciones;

	@Override
	public TablaListaResponse listarTablasSistema(String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		
		
		TablaListaResponse response = new TablaListaResponse();
		try{
			List<TablasListaEntity> listaTabla = null;
			response.setIdTransaccion(codTransaccion);
			try{
				
				listaTabla = mantenimientoTablaDao.listarTablas(cadenaFiltros);
				
			}catch(Exception e){
				System.out.println("Error al traer la Data de BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_TABLASISTEMA_COD_IDT22);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_TABLASISTEMA_MSJ_IDT22);
			}
			
			if(listaTabla.size() > 0){
				List<TablaSistemaBean> lisTablas = new ArrayList<TablaSistemaBean>();
				
				for(TablasListaEntity row : listaTabla){
					TablaSistemaBean newtabla = new TablaSistemaBean();
					newtabla.setCodTabla(row.getId());
					newtabla.setNombreTabla(validaciones.validarCamposString(row.getNombre()));
					newtabla.setNumCampos(row.getNum_campos());
					newtabla.setActive(row.getActive());
					lisTablas.add(newtabla);
				}
				
				response.setListaTablasSistema(lisTablas);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_TABLASISTEMA_COD_IDF21);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_TABLASISTEMA_MSJ_IDF21);
			}
			
		}catch(Exception e){
			System.out.println("Error en el proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_TABLASISTEMA_COD_IDT22);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_TABLASISTEMA_MSJ_IDT22);
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevaTablaSistema(String codTransaccion, TablaSistemaBean tabla) {
		
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity tablaDao = null;
			response.setIdTransaccion(codTransaccion);
			TablaDetRequest req = new TablaDetRequest();
			req.setNombreTabla(validaciones.validarCamposString(tabla.getNombreTabla()));
			req.setNumCampos(validaciones.validarCampoInteger(tabla.getNumCampos()));
			req.setActive(tabla.getActive());
	
			try{
				tablaDao = mantenimientoTablaDao.guardarTablas(req);
			}catch(Exception e){
				System.out.println("Error al guardar de BD " + e);
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_TABLASISTEMA_COD_IDT23);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_TABLASISTEMA_MSJ_IDT23);
			}
			
			if(tablaDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_TABLASISTEMA_COD_IDF22);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_TABLASISTEMA_MSJ_IDF22);
			}
			
			
		}catch(Exception e){
			System.out.println("Ocurrio un Error en el Proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_TABLASISTEMA_COD_IDT23);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_TABLASISTEMA_MSJ_IDT23);
		}
		
		return response;
	}

	@Override
	public GenericResponse editTablaSistema(String codTransaccion, TablaSistemaBean tabla) {
		
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity tablaDao = null;
			response.setIdTransaccion(codTransaccion);
			TablaDetRequest editTabla = new TablaDetRequest();
			editTabla.setCodTabla(validaciones.validarCampoInteger(tabla.getCodTabla()));
			editTabla.setNombreTabla(validaciones.validarCamposString(tabla.getNombreTabla()));
			editTabla.setNumCampos(validaciones.validarCampoInteger(tabla.getNumCampos()));
			editTabla.setActive(tabla.getActive());
			try{
				tablaDao =mantenimientoTablaDao.actualizarTablas(editTabla);
				
			}catch(Exception e){
				System.out.println("Error al Editar la tabla en BD " + e);
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_TABLASISTEMA_COD_IDT24);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_TABLASISTEMA_MSJ_IDT24);
			}
			
			if(tablaDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_TABLASISTEMA_COD_IDF23);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_TABLASISTEMA_MSJ_IDF23);
			}
			
		}catch(Exception e){
			System.out.println("Error en el proceso editTablaSistema " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_TABLASISTEMA_COD_IDT24);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_TABLASISTEMA_MSJ_IDT24);
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteTablaSistema(String codTransaccion, int codTabla) {
		
		GenericResponse response = new GenericResponse();
		try{
			
			response.setIdTransaccion(codTransaccion);
			
			GenericEntity tablaDao = mantenimientoTablaDao.eliminarTabla(codTabla);
			
			if(tablaDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_TABLASISTEMA_COD_IDF24);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_TABLASISTEMA_MSJ_IDF24);
			}
		
		}catch(Exception e){
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_TABLASISTEMA_COD_IDT25);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_TABLASISTEMA_MSJ_IDT25);
		}
		return response;
	}

}
